package cn.itcast.service.system.impl;

import cn.itcast.dao.system.ModuleDao;
import cn.itcast.dao.system.UserDao;
import cn.itcast.domain.system.Module;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.ModuleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class ModuleServiceImpl implements ModuleService{
    @Autowired
    private ModuleDao moduleDao;
    @Autowired
    private UserDao userDao;
    //分页 查询
    public PageInfo findAll(int page, int size) {
        //1.设置分页参数
        PageHelper.startPage(page,size);
        //2.查询所有
        List<Module> list = moduleDao.findAll();
        //3.构造返回值
        return new PageInfo(list);
    }

    //查询所有
    public List<Module> findAll() {
        return moduleDao.findAll();
    }

    //根据id查询
    public Module findById(String moduleId) {
        return moduleDao.findById(moduleId);
    }
    //保存
    public void save(Module module) {
        //保证id唯一
        module.setId(UUID.randomUUID().toString());
        //调用dao保存
        moduleDao.save(module);
    }
    //更新
    public void update(Module module) {
        moduleDao.update(module);
    }
    //删除
    public void delete(String moduleId) {
        moduleDao.delete(moduleId);
    }
    //根据角色的id查询所有可操作模块
    public List<Module> findByRoleId(String roleId) {
        return moduleDao.findByRoleId(roleId);
    }
    //根据用户id查询可操作的模块信息
    public List<Module> findByUserId(String userId) {
        //1.根据用户id查询用户
         User user = userDao.findById(userId);
        //2.获取当前用户的级别（类型：degree）
        Integer degree = user.getDegree();
        //3.根据不同的degree，完成不同的业务查询
        if (degree == 0){
            //degree == 0，saas管理员 ： 查询所有模块中belong=0的数据
            return moduleDao.findBelong(0);
        }else if (degree == 1){
            //degree == 1，企业管理员 ： 查询所有模块中belong=1的数据
            return moduleDao.findBelong(1);
        }else {
            //degree == 其他，企业普通员工 ：rbac权限模型，多表查询
            return moduleDao.findByUserId(userId);
        }

    }


}
